package com.dc.commons.utils.excel;

import java.util.regex.Pattern;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.ss.usermodel.Cell;

/*******************************************************************************<P>
 * 文件名: CellData.java <br>
 * 版本: 1.0<br>
 * 描述:<br>
 * 版权所有: <br>
 * <P>
 * 创建者: 王建栋 <br>
 * 创建日期: 2016年6月1日 下午4:02:49<br>
 * 修改者: <br>
 * 修改日期: <br>
 * 修改说明: <br>
 ******************************************************************************/
public class CellData {
	
	//private static DecimalFormat df = new DecimalFormat("#.#");

	   //对()的用法总结：将()中的表达式作为一个整体进行处理，必须满足他的整体结构才可以。
	   //(.[0-9]+)? ：表示()中的整体出现一次或一次也不出现
	 private static Pattern pattern = Pattern.compile("[0-9]+(.[0-9]+)?");

	public CellData(Object value){
		this.data=value;
	}
	public Object data;

	public Object getData() {
		return data;
	}
	
	public static CellData valueOf(Cell cell ){
		Object obj=getCellFormatValue(cell);
		return new CellData(obj);
	}
	
    /**
     * 根据HSSFCell类型设置数据
     * @param cell
     * @return Object
     */
    private static Object getCellFormatValue(org.apache.poi.ss.usermodel.Cell cell) {
        Object cellvalue = "";
        if (cell != null) {
            // 判断当前Cell的Type
            switch (cell.getCellType()) {
	            // 如果当前Cell的Type为NUMERIC
	            case HSSFCell.CELL_TYPE_NUMERIC:
	            case HSSFCell.CELL_TYPE_FORMULA: 
	            	boolean isDate=false;
	            	try{
	            		isDate=HSSFDateUtil.isCellDateFormatted(cell);
	            	}catch(Exception e){
	            	}
	                // 判断当前的cell是否为Date
	                if (isDate) {
	                    // 如果是Date类型则，转化为Data格式
	                    cellvalue =cell.getDateCellValue();
	                }else {
	                	// 如果是纯数字  取得当前Cell的数值
	                   // cellvalue = String.valueOf(cell.getNumericCellValue());
	                	//这里会遇到 cell类型是数字但是他却不是数字的这时就会报错
	                	try{
	                		cellvalue=cell.getNumericCellValue();
	                	}catch(Exception e){
	                		cell.setCellType(org.apache.poi.ss.usermodel.Cell.CELL_TYPE_STRING);
	                		if(pattern.matcher(cell.getStringCellValue()).matches()){
	                			cellvalue=Double.parseDouble(cell.getStringCellValue());
	                		}else{
	                			cellvalue=cell.getRichStringCellValue().getString();
	                		}
	                	}
	                }
	            
	                break;
	            // 如果当前Cell的Type为STRIN
	            case HSSFCell.CELL_TYPE_STRING:
	                // 取得当前的Cell字符串
	                cellvalue = cell.getRichStringCellValue().getString();
	                break;
	            // 默认的Cell值
	            default:
	                cellvalue = "";
            }
        }
        
        return cellvalue;

    }
}
